----- 读写C++变量 -----


https://doc.qt.io/qt-6/zh/qtqml-cppintegration-exposecppstate.html

 C++ 
使用 Q_PROPERTY 宏
/*--------语法--------*/
    Q_PROPERTY(类型 name READ name WRITE setName NOTIFY nameChanged)
        ♦ 类型 name:qml中使用该变量名访问
        ♦ READ name:调用 name()成员函数来读取这个属性的值
        ♦ WRITE setName:调用 setName()成员函数来设置这个属性的值
        ♦ NOTIFY nameChanged:当这个属性的值发生变化时,会发出nameChanged()信号
        ♦♦♦ READ为必须,WRITE 和 NOTIFY 为可选,即是否需要写入和实时更新(绑定)
/*--------myClass.h--------*/
    Q_OBJECT
    //使用 Q_PROPERTY 将变量 a 暴露给 QML
    Q_PROPERTY(bool aQ READ aQ WRITE setAQ NOTIFY aQChanged)
    
public:
    //Getter函数 提供读取功能(对应READ)
    bool aQ() const { return a; }
        //a 即为要读写的C++成员变量
    
    //Setter函数 提供写入功能(对应WRITE)
    void setAQ(const bool &value) {
        if (a != value) {
            a = value;
                //a 即为要读写的C++成员变量
            emit aQChanged();
                //发生改变时发出信号
        }
    }
    
signals:
    void aQChanged();
        //信号函数
    
private:
    bool a = false;
        //被访问的成员函数
    
/*--------main.cpp--------*/
#include "myclass.h"
#include <QQmlContext>
    
int main(int argc, char *argv[])
{
    //创建类实例
    MyClass myObject;
        //语法:类名+ 实例名;
    
    //通过实例名访问,QML 中 通过 name 访问
    engine.rootContext()->setContextProperty("name", &myObject);
        //语法:实例别名+ 实例名;(实例别名可以与实例名一样)
}


 QML 
使用 Q_PROPERTY 宏
import QtQuick
import QtQuick.Controls
    
Button {
    //通过👉实例别名.变量名👈访问
    onClicked: console.log( name.aQ )
}